home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 16
/
Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso
/
Aminet
/
misc
/
emu
/
QDOS1.lha
/
QLboot
/
DOCs
/
QDOS.doc
< prev
next >
Wrap
Text File
|
1996-10-06
|
68KB
|
2,193 lines
Introduction to QDOS
--------------------
1) What is QDOS ?
QDOS is an operating system designed for small 68000 computers,
which provides multitasking, a virtual device interface for graphics,
an easy to program device driver interface, and last but not least
a highly sophisticated structured and expandable resident command
language interpreter called "SuperBASIC". Since it was first
implemented on a computer with only 128K RAM and 48K ROM this
operating system and its supporting Software and compilers are
small and very efficient, mostly programmed directly in native
68000 machinecode. This makes QDOS the ultimate operating system
for all small computers like for example the Amiga 500 and single
board controller computers, which can use a real time operating
system and the whole support software for their applications.
QDOS was written by Tony Tebby, who has my deep respect for this.
2) Why QDOS ?
You may now say, why bothering with QDOS when I have Amiga DOS, which
provides multitasking too, and can use all the fuzzy features of the
Amiga without any effort ?
Okay, you are a real horsetrader. Take for example the pretty serial
interface, isn't it nice ? It looks really good, and the preferences
can be set to any value, but this does not mean, that these values
have anything to do with what is happening in the head of the Amiga.
So the handshake lines have a really unsatisfactory live, always
ignored by the software. Or what's about getting rid of a task which
has become superfluos, try throwing it in the nice Trashcan of your
Workbench. But don't tell it to the Guru, he may get angry !
Enough ? Oh no, There is another bill concerning the rundimentary
command line interpreter, and this unbelievable stupid Amiga BASIC.
...I stop here, because I get headache when I think about it.
But I can tell you, what are the real advantages:
1) You can easily intervent in every software and datafiles, since
QDOS is small and surveyly. QDOS is (at least on the QL) a higly
reliable operating system, which is hardly crashed
2) Software development using Superbasic and a compiler is an easy
interactive process.
For small problems this is by far the fastest solution
3) You have a very nice operating system for developing realtime
applications for single board computers for measurement and
controll
4) QDOS is (directliy behind MS-DOS) one of the mostly emulated
Operating systems. It is implemented for example on the Atari ST,
now on the Amiga, and on a series of dedicated computers:
the Sinclair QL, the OPD, the Thor, and the Futura.
3) Introduction to SuperBASIC
*) QDOS special keys
<Ctrl><F5> freezes the screen (Hold Screen on normal Terminals)
<Ctrl><Space> Break for BASIC programms
<Ctrl><Alt><7> NMI BASIC Warmstart
a) general structure
Superbasic programs consists of lines, which start with a positive
non zero integer, and contain one or more statements, which are
separated by ":". Identifiers are separated by any non zero
number of spaces. Identifiers can consist of letters, numbers
and the underliner. The length of names is only restricted by
the amount of typing work, you want to spend. Names are not
case sensitive. Integer Functions and variables are identified
by a trailing "%", String functions and Variables have a trailing
"$". String constants can be enclosed in single or double qoute.
The ":" has the function of a null statement and can therefore
be the only statment on a line. Comments are introduced by a
REMark statment, which can be abrieviated by REM.
DATA items are separated by "," where String type items must be
enclosed in single or double qoute. The DATA statement must be
the first statement on a line. This line is treated as comment.
You can read DATA by a READ var[,var2,...] statement. The DATA
pointer can be restored to any linenumber by a RESTORE [n]
statement
b) structured loops
There are only two types of loops, but they have powerfull extras:
The First one is the FOR loop, which looks like follows:
FOR index=start_expr TO end_expr [STEP expr]
....
[NEXT index]
....
[EXIT index]
....
END FOR index
index must be a floating point variable, the STEP expression
can be non integer, default is 1.
FOR loops are enclosed between FOR ... END FOR index.
In a single line FOR loop, the END FOR terminator can be omitted
The NEXT keyword jumps back to the FOR statement, whereas
the EXIT statement forces a jump behind the END FOR statement.
The second loop is the REPeat loop:
REPeat loop_name
....
[NEXT loop_name]
....
[EXIT loop_name]
....
END REPeat loop_name
You can only escape from the loop with an EXIT statment.
The NEXT statement will restart the loop at REPeat.
You normally will test a termination condition at the
start (WHILE) or at the end (REPEAT UNTIL) and EXIT.
Example:
100 REPeat Read_data
110 IF EOF(#3) THEN EXIT Read_data
120 INPUT #3,a$
130 PRINT a$
140 END REPeat Read_data
c) IF ... THEN ... ELSE ... END IF
Single line IF statements do not need to be terminated with END IF.
The operators AND,OR,XOR are logical, not bitwise !
For Integer bitwise operators use &&,||,^^.
d) selecting data (CASE OF, SWITCH ON)
Select variables must be Floating point type, and no formal
parameters are allowed. The format then is:
SELect ON Sel_var
=1 : ...
=3,6,8 : ...
=10 TO 99 : ...
=REMAINDER : ...
END SELect
e) procedures, functions and parameters
PROCedures and FuNctions can be ordered top down or bottom up
or free style. They can be recursive, Parameters can be modified.
The definition is introduced with
DEFine PROCedure name[(par1,par2...)]
or
DEFine FuNction name[(par1,par2...)]
The formal parameters do not have a type !
String FuNctions must end with a '$', integer FuNctions with '%'.
The next line after the Definition contains the LOCal variable list
which is introduced by the keyword LOCal. You should not try to
declare more than 9 local variables, since this may confuse the
Interpreter. Arrays can be dimensioned at declaration time:
LOCal var1,var2$,var3(100,10)
FuNctions return theier result using the RETurn statement.
The RETurn statement can be used without any argument to
escape from a procedure.
RETurn result
The FuNction and PROCedure is terminated using the END DEFine
statement:
END DEFine name
Example:
100 DEFine FuNction FAK(n)
110 LOCal m
120 IF n=0 THEN
130 m=1
140 ELSE
150 m=n-1 : m=n*FAK(m)
160 END IF
170 RETurn m
180 END DEFine FAK
f) !!! string handling and array slicing !!!
String handling on Superbasic is very different from any other
language !
A string expression can consist of
String constants enclosed in single quote or double quote
String variables terminated with '$'
String slices which consist of the name, and a range: A$(3 TO 6)
String functions
and the concanation operator, which is the ampersand: '&'
Array and string slices need not to specify start and end:
A( TO 8) will start with the first element
A(3 TO) will end with the last element.
this can be wrong for strings, since the number of elements is not
allways the length of a string !
arrays and array slices can be passed to procedures, but
slices are considered as expressions, and can therefore not
return values from a procedure.
INSTR is implemented as operator , not as Function !
Example: N= "TEST" INSTR A$ return the position of "TEST"
Strings can have a length of up to 32767 characters.
Strings can be Dimensioned. If you need an Array of Strings, the
last index specifies the length of the string
g) error processing
There are different kinds of error processing for SUPERBASIC.
The official one only works in the pure interpreter mode:
10 WHEN ERROR
20 PRINT 'sorry, there was an error:',ERNUM,'at ',ERLIN
30 END WHEN
or for debuging purposes:
10 WHEN a=123
20 PRINT 'The Value has reached the Limit !'
30 END WHEN
The WHEN statements must have been executed once, before they
become active.
If You compile programs with the Qliberator, you should use
the QERR_ON 'function' , QERR_OFF 'function' procedure, which
traps error returns and set a flag which can be read with Q_ERR.
h) interfacing to assembler
This is probably one of the biggest advantages of SUPERBASIC over
nearly all other BASIC interpreters I know.
You can easily add new functions and procedures to the interpreter,
which then will behave as if they have ever belonged to it.
The following VECTORED UTILITIES are designed to assist you:
BP.INIT $110 A1=pointer to definition list
initialize procedures and functions
CA.GTINT $112 A1=pointer to stack , A3/A5=first/last parameter
get any number of integer parameters from BASIC to stack
CA.GTFP $114 as above
get floating point (6 bytes !)
CA.GTSTR $116 as above
get string
CA.GTLIN $118 as above
get long integer (4 byte)
BV.CHRIX $11A D1.L=number of bytes
allocate space on arithmetic stack
BP.LET $120 A3=pointer to name table entry
return parameter value to BASIC
The error is returned as negative Number in D0
A normal RTS instruction should be used to return to BASIC.
A6 should never be changed, since this is used as pointer to
the BASIC memory area.
For more Details have a look at some assembler sources.
i) command summary of functions and procedures
*1 = T.Tebby toolkit 2
*2 = Turbo Toolkit (supplied with TURBO basic compiler)
*3 = Qliberator toolkit
*4 = any other toolkit or program
_R grafic commands refer to the last plotted point as origin.
Graphic coordinates refer to a virtual device with non integer
coordinates, which can be scaled using SCALE.
This makes it possible (in principle) to output graphics
on any device with maximum resolution. You should not
wonder about the strange factor between X and Y coordinates,
this is the monitor X/Y relation, which makes circles round.
PIXEL coordinates are physical coordinates (X=0..511, Y=0..255)
With the T.Tebby Toolkit 2 #n is almost synonym with \filename,
which will act on the file directly, instead on a channel.
Job handling requires the name as string or the ID in the
form Number,Tag.
ABS(F) returns positive number
ACOS(F) returns inverse of cosine
ACOT(F) returns inverse of cotangent
ADATE n advance date in seconds (+ or -)
AJOB ID% or NAME$, priority%
*1 activates a job
ALARM h%,m%
*1 can not work on the amiga, since sound is not emulated
ALCHP(n) *1 allocates space (n bytes) in the common heap area
and returns the address of the first byte to use
ALLOCATION ? sometimes I am wondering myself
ALTKEY Key$,String$
*1 if you type the key in key$ together with the <ALT> key
afterwards, the String in String$ will be displayed.
ARC [#n,]x,y TO x1,y1,angle
draw an arc between x,y and x1,y1
ARC_R same as ARC, but uses relative coordinates
ASIN(F) returns the inverse sine
AT [#n,]y%,x% set cursorusing character coordinates
ATAN(F) returns the inverse tangent
AUTO n,i old fashioned basic programming tool
BASIC_B% *2 ??????????????????
BASIC_F *2
BASIC_INDEX%
*2
BASIC_L *2
BASIC_NAME$
*2
BASIC_POINTER
*2
BASIC_TYPE%
*2
BASIC_W% *2 ???????????????????
BAUD n% set baudrate for serial transmission
BEEP any number of parameters
can not work on the amiga, since sound is not emulated
BEEPING will return nonsense
BGET #n[\ptr],list_of_vars
*1 get bytes from a file, refering to a pointer
BICOP *my own toolkit, makes a hardcopy sideways
BIN(str$) *1 binary conversion
BIN$(n,bits)
*1 returns a string containing binary representation of n
BLOCK [#n,]x,y,bx,by,c
draws a rectangle at x,y in colour c , PIXEL coordinates !
BLOOK(a$,adr)
*my own toolkit, searches for a string in memory
BMOVE start,end,to
*my own toolkit, memory block move
BORDER [#n,]w,c
gives a border with thickness w in colour c
BPUT #n[\ptr],list_of_vars
*1 but bytes into a file, refering to a pointer
CALL PC[,D1,D2,D3,D4,D5,D6,D7,A0,A1,A2,A3,A4,A5]
call a machine code programm
CATNAP *2 ?????
CDEC$(value,field,ndp)
*1 currency conversion
CHANNEL_ID(#n)
*2 returns QDOS channel ID for basic channel #n
CHARGE *2 should run the TURBO compiler. Crash system !
CHAR_INC [#n,]x_inc,y_innc
*1 set character spacing
CHAR_USE [#n,]adr1,adr2
*1 set address of new character font (first and second)
CHR$(n%) returns character with ascii number n
CIRCLE [#n,]x,y,r[,eccentricity,angle]
draw a circle or ellipse in graphic coordinates
CIRCLE_R [#n],x,y,r
draw circle using relative origin
CLCHP *1 clear all common heap allocations for BASIC
CLEAR clear all variables, tidy BASIC stack
CLOCK [#n,][string$]
*1 displays a clock (try %Y %D %H %M %S)
CLOSE [#n] [*1] close a[ll] channel[s]
CLR_SEALST *RK00 don't use search list RAM1_, RAM2_, FLP1_, FLP2_
CLS [#n,][o%] clears all or part of a window.
o%= 0: whole screen
1: top excluding cursor line
2: bottom excluding cursor line
3: whole cursor line
4: right end of cursor line, including cursor
CODE(c$) returns ASCII representation of character
COL(x512,y256)
*my own toolkit.
Returns colour of pixel using pixel coordinates
COMMAND_LINE
*2 for compiler only
COMPILED *2 for compiler only
CONNECT *2 ???????????????????
CONTINUE if a program has been stopped using STOP or <break>
COPY file1$ TO file2$
[*1] copy a file. With TK2 default devices are provided
COPY_H file1$,file2$
*1 copy file with header
COPY_N file1$ TO file2$
[*1] copy file without header
COPY_O file1$,file2$
*1 copy overwrite
COS(F) returns cosine
COT(F) returns cotangent
CSIZE [#n,]x,y set characcter size. x=0,1,2,3 ; y=0,1
CURDIS [#n] *1 suppress cursor
CURSEN [#n] *1 enable cursor
CURSOR [#n],x,y set cursor position using PIXEL coordinates
(relative to window origin)
CURSOR_OFF [#n]
*2 use CURDIS, it is shorter and more reliable
CURSOR_ON [#n]
*2 use CURSEN, shorter and more reliable
DATAD$ *1 returns default data device
DATASPACE *2
DATA_AREA *2
DATA_USE drv$
*1 set default data device
DATE returns seconds since anno tobac
DATE$ returns a string containing actual time
DAY$ returns a string with actual day
DDOWN name$
*1 kind of subdirectory handling using default data device
and the default program device in a rather obscure manner.
DEALLOCATE *2
DEFAULT_DEVICE *2
DEF_INTEGER *2
DEG(F) convert angle from radian to degree
DELETE file$
[*1] delete a file
DEL_DEFB *1 cure to large scale heap fragmentation, deletes
file definition blocks. Dangerous !
DESTD$ *1 returns default destination for SPL
DEST_USE name$
*1 set default destination for SPL
DEVICE_SPACE *2
DEVICE_STATUS *2
DIMN(array(...))
returns the dimension of an array, or vector in an array
DIR dev$ [*1] shows directory of device. With TK2 it uses defaults
DISK_ED *4 nice Tool to edit single sectors on a floppy disk.
DLINE n1 [TO n2] old fashioned BASIC editor primitive
DLIST *1 lists default devices
DNEXT name$
*1 kind of subdirectory handling using default data device
and the default program device in a rather obscure manner.
DO file$ *1 executes a BASIC batch file, which must not contain
line numbers !
DOTLIN per1,per2,per3,c,x1,y1,x2,y2
*my own toolkit, draws a dotted line using pixel coordinates
DUP *1 kind of subdirectory handling using default data device
and the default program device in a rather obscure manner.
ED [#n,][l] *1 full screen BASIC editor.
Only works WITHOUT TAS instructions !
<ESC> undo line or leave editor
<Shift> Up and down: page
<F4> toggle insert/overwrite
<Alt><Ctrl> left: delete line
EDIT n% old fashioned BASIC editor primitive
EDITF([#n,]F)
*2 edits and returns a Floatingpoint number
EDITOR file$
*4 Starts a new file editor session (Assembler Workbench)
EDIT$(str$) *2 edits and returns a string
EDIT%(n%) *2 edits and returns an integer
ELLIPSE [#n,]x,y,r,e
draw an ellipse using graphic coordinates
ELLIPSE_R [#n,]x,y,r,e
draw an ellipse using relative origin
END_CMD *2 when using MERGE instead of DO, last command in batchfile
END_WHEN ?????
EOF[(#n)] boolean function EndOfFile
(without channel refers to DATA in program)
ERLIN returns line which produced the last error
ERLIN%
ERNUM returns QDOS number of last error
ERNUM%
ERR_BL returning corresponding QDOS error number
ERR_BN
ERR_BO
ERR_BP
ERR_DF
ERR_EF
ERR_EX
ERR_FE
ERR_FF
ERR_IU
ERR_NC
ERR_NF
ERR_NI
ERR_NJ
ERR_NO
ERR_OM
ERR_OR
ERR_OV
ERR_RO
ERR_TE
ERR_XP
ET file$ *1 execute for trace
EW [#n TO] prog_file$ [TO file2$] [TO #m] [; parameter$]
*1 execute and wait
set up pipes and pass parameters
EX [#n TO] prog_file$ [TO file2$] [TO #m] [; parameter$]
*1 execute and ccontinue
set up pipes and pass parameters
EXEC file$ [*1] execute and continue. With TK2 same as EX
EXECUTE *2
EXECUTE_A *2
EXECUTE_W *2
EXEC_W file$
[*1] execute and wait. With TK2 same as EW
EXP(F) returns e^F
EXTERNAL *2
EXTRAS [#n].*1. shows any non standard procedures
EXT_FN
EXT_PROC
FCO *my own toolkit, Fast hardcopy
FDAT(#n) *1 return dataspace of file
FDEC$(value,field,ndp)
*1 fixed format decimal
FEXP$(value,field,ndp)
*1 fixed exponent format
FILE_ED *?? nice tool
FILL [#n,]b enables (b=1) or disables (B=0) fill mode in this window
FILL$(c$,n) returns c$ n times
FLASH [#n,]b does not work on the Amiga, flashing not implemented
FLEN(#n) *1 returns length of file
FLOAT$(F) *2 returns a 6 byte internal representation of a FP number
FLP_OPT *floppy controller, will not work on the Amiga yet.
FLP_USE str$
*flp device redefinition (for example FLP_USE 'MDV' will
emulate a microdrive on the floppy)
FLUSH [#n] *1 flush file buffers
FNAME$(#n) *1 returns the filename for this channel
FOPEN(#n,file$)
*1 open file for read/write and return error status
FOP_DIR(#n,file$)
*1 open directory and return error status (may be read only)
FOP_IN(#n,file$)
*1 open file for input and return error status
FOP_NEW(#n,file$)
*1 create and open new file for output, return error status
FOP_OVER(#n,file$)
*1 open old file for overwrite, return error status
FORMAT name$ format a device (implemented only for FLP)
FPOS(#n) *1 return actual file pointer
FREE_MEM *1 a measure for the amount of available memory in bytes
FREE_MEMORY *2 long form, may differ in a few bytes
FSERVE *1 Network server task, not implemented on the Amiga yet
FTEST(#n) *1 check if file exists
FTYP(#n) *1 returns file type: 0=text , 1=executable , 2=relocatable
FUNCTION *2
FUPDT(#n) *1 returns file update date
FXTRA(#n) *1 returns file extra information
GET #n [\ptr,]var_list
*1 unformatted input of variables. The type of the variables
should agree with the corresponding items to read.
GETF(#n) *2 unformatted input of floatingpoint variables
GETXY x%,y% *my own toolkit, starts a crosshair cursor and returns
the PIXEL coordinates
GET$(#n) *2 unformatted input of strings
GET%(#n) *2 unformatted input of integer
GLOBAL *2 ???
HCO *my own toolkit, makes a hardcopy with grey steps
HEX(string$)
*1 hexadecimal conversion
HEX$(n,bits)
*1 returns hex representation
IDEC$(value,field,ndp)
*1 number format conversion
IMPLICIT$ *2
IMPLICIT% *2
INK [#n,] c set colour [0..255 including stipples] for PRINT, LINE ...
INKEY$[#n,][time]
input one character from channel, timeout in 1/50 sec
Warnig ! the cursor must be enabled !
INPUT ("Last guess " & guess & "New guess?") ! guess
INPUT "Nice day,";isnt_it
and advanced version of the goodigood INPUT
INPUT$ *2
INT(F) returns the next bigger integer to F (32 bit signed)
INTEGER$ *2
INVXY x%,y% *my own toolkit, xors a cross at x%,y% using PIXEL coorrdinates
JOBS [#n] *1 lists active jobs
JOB$(ID) *1 return name of Job with ID
KEYROW(row) returns a raw key matrix pattern in QL like form:
1 2 4 8 16 32 64 128
ctrl
7 shift Alt X V / N ,
6 8 2 6 Q E O T U
5 9 W I TAB R - Y
4 L 3 H 1 A P D J
caps
3 | Lock K S F = G ;
2 | Z C B ` M ~
enter down
1 <- up ESC -> \ space
0 F4 F1 5 F2 F3 F5 4 7
LBYTES file$,adr
load a contents of a file to specified address
LDRAW x,y,x1,y1,c
*my own toolkit, draw line using PIXEL coordinates
LEN(str$) returns length of a string
LIBERATE filename$[;]
*3 loads the QLIBerator BASIC compiler
LINE [#n,] [x,y] TO x1,y1 [TO...]
draw line using graphic coordinates
LINE_R same for relative origin
LINK_LOAD *2
LINK_LOAD_A *2
LINK_LOAD_W *2
LIST [n] [TO m]
old fashioned Basic editor primitive
LIST_TASKS *2 If you like to type long stories...
LN(F) natural logarithm
LOAD file$ loads a BASIC program
LOG10(F) decadic logarithm
LRESPR file$
*1 loads a RAM toolkit into the resident procedure area
LRUN file$ load and run a basic program
MERGE file$ merges a BASIC program to the current one
MODE n 8 selects low resolution (8 colour) mode,
4 selects high resolution (4 colour) mode.
The 8 colour mode is not emulated. Future
expansion to 640 x 512 is intended.
MOVE [#n,] distance
Move turtle of turtle graphics
MOVE_MEMORY *2
MRUN file$ Merging can be programmed this way
NET n set network station number. Not implemented on the
Amiga yet. You are welcome to help us !
NEW try it after you have written 3 hours on a BASIC program
NFS_USE str$
*1 Network devicename redefinition, sorry, don't do anything.
NXJOB(ID,Top_job_id)
*1 returns ID of next job in tree
OJOB(ID [or name])
*1 find owner of Job
OPEN #n,file$
[*1] opens a file for read/write. With TK2 uses defaults
OPEN_DIR #n,dev$
opens directory of given device (may be read only)
OPEN_IN #n,file$
[*1] open file for read only
OPEN_NEW #n,file$
[*1] create and open file
OPEN_OVER #n,file$
*1 open file for output and rewrite
OPTION_CMD$ *2
OVER [#n,]switch
0 : print ink on strip
1 : print ink on transparent strip
-1 : XOR data on screen
OV_OFF *new ! disable overflow error. Be carefull !
OV_ON *new ! enable overflow error
PAINT x,y,c
*my own toolkit, fills a closed figure on the screen
at x,y in PIXEL coordinates with colour c
PAN [#n,]distance[,part]
pan window #n distance pixel to the left (positive number)
part = 0 : whole screen (default)
= 3 : whole cursor line
= 4 : right hand end of cursor line
PAPER [#n,]colour[,contrast,stipple]
set background colour
PARNAM$(n) *1 returns the name of the n'th formal parameter of a
function (may not work)
PARSTR$(parameter,n)
*1 returns the name or the string if it is a string expr.
PARTYP(n) *1 0 : null , 1 : string , 2 : floating , 3 : integer
PARUSE(n) *1 0 : unset , 1 : variable , 2 : array
PAUSE n suspend actual task (BASIC) for n/50 seconds
PEEK(adr) 1 byte peek
PEEK_F(adr) *2 6 byte peek
PEEK_L(adr) 4 byte peek
PEEK_W(adr) 2 byte peek
PEEK$(adr,n)
*2 n byte peek
PENDOWN [#n] draw turtle moves
PENUP [#n] hide turtle moves
PI =3.1415927
PJOB(id || name)
*1 return priority of job
POINT [#n,]x,y[,x,y...]
set a point in INK using graphic coordinates
POINT_R [#n,]x,y[,x,y...]
set a point in INK relative to last position
POKE adr,n 1 byte poke
POKE_L adr,n 4 byte poke
POKE_W adr,n 2 byte poke
POKE$ adr,a$
*2 n byte poke
POSITION(#n)
*2 return file position
PRINT [#n,]item[s]
print variables formatted. separators:
! intelligent space
, 8 columns tab
; just separate. At the end prevents new line
\ force new line
TO n tabulate to column n
PRINT_USING [#n,]format$,item[s]
*1 the formatting string can contain the following symbols:
####.## fixed point decimal
##,###.## separate thousands with commas
-#.###!!!! exponential form, optional sign
+#.###!!!! exponential form, including sign
PROCEDURE *2
PROGD$ *1 return default program device
PROG_USE dev$
*1 set default program device
PUT [#n,]position,item[s]
*1 unformatted output using filepointer.
The pointer will be updated
QLOAD *3 Fast load !!!! does not work on RK00 !!!!
QLRUN *3 Fast load and run !!!! does not work on RK00 !!!!
QREF name *3 gives information about BASIC tokens
QREF_A name *3 token information , sort of wildcard
QREF_M *3
QREF_P *3
QREF_V *3
QSAVE *3 fas save (loading does not work anyway)
QW file;"str" any number of parameters
*3 like EW (see there) but using _OBJ extension
QX file;"str" any number of parameters
*3 like EX (see there) but using _OBJ extension
QX_JOB0 ... *3 execute job with owner BASIC
Q_CURSOFF [#n]
*3 another cursor off utility
Q_CURSON [#n]
*3 another cursor on utility
Q_ERR *3 returns the last error number
Q_ERR_LIST *3 list function and procedures with disabled error handling
Q_ERR_OFF name
*3 switch off error handling for a procedure or function
Q_ERR_ON name
*3 enable error handling for a procedure or fuunction
Q_L *3
Q_MYJOB *3 returns actual job id
Q_PIPE *3
RAD(n) convert degree to radian
RAM_USE dev$
*4 mdv emulation for Ram disk
RANDOMISE [n] reset random number generator
READ item[,item...]
read data from program file
RECHP adr *1 deallocate common heap (counterpart to ALCHPP)
RECOL [#n,]c0,c1,c2,c3,c4,c5,c6,c7
recolour a window
REFERENCE *2 forget it
RELEASE_TASK *2
REMOVE_TASK *2
RENAME file TO newname
[*1] rename files. with TK2 you may use commas to separate
RENUM [start [TO end;] new][,step]
renumber a basic program
REPORT
RESPR(n) reserve n bytes in resident procedure area, return adress
RETRY retry after error (repeat instruction)
RETRY_HERE
RJOB id or name
*1 force remove job
RND[(n [TO n2]) return random number between 0 and 1 or n1 and n2
RUN [n] start execution of BASIC program
SAVE file[,n1 TO n2]
[*1] save BASIC program (as ASCII)
SAVE_O *1 save overwrite
SBYTES file,adr,n
[*1] save n bytes memory starting with adr as file
SBYTES_O file,adr,n
*1 save memory overwrite
SCALE [#n,]scale,origin
set width and origin for grafic coordinates
default is 100 at 0,0 (Monitor X/Y is included !)
SCROLL [#n,]distance,part
scroll window distance pixel
part = 0 whole screen
part = 1 top excluding cursor line
part = 2 bottom excluding cursor line
SDATE year,month,day,hours,minutes,seconds
set clock (does not affect battery buffered realtime clock)
SEARCH_MEMORY
SET x%,y%,c%
*my own toolkit: set pixel using pixel ccoordinates
SET_CHANNEL
SET_FONT
SET_POSITION #n,p
*2 set file pointer
SET_PRIORITY
SEXEC file,adr,size,dataspace
[*1] save memory block as executable task
SEXEC_O file,adr,size,dataspace
*1 save memory block as task, overwrite
SIN(x) return sine
SNOOZE *2
SPJOB id,priority
*1 set new priority for job
SPL file *1 file spooler (Background printing)
SPLF
SPL_USE dev$
*1 set default spool device
SQRT(x) return the square root of x
STAT [#n,]dev$ returns device statistics
STOP stop basic program (continue with CONTINUE)
STRING$
STRIP [#n],c set strip colour
SUSPEND_TASK *2
SYS_RESET *new does not work on Amiga (CRASH !!!)
S_GPOS #n *4 position of filepointer for screens
S_LOAD #n *4 load compressed picture from file
S_SAVE #n[,size]
*4 compress and save picure
S_SPOS *4
TAN(x) return tangent of x
THROW_AWAY *2 do it
TK2_EXT *1 force Toolkit 2 extensions
TK_VER$ *2
TRA adr set translate table for output (to printer)
TRUNCATE #n *1 truncate overwrite file
TURN [#n],angle
turn turtle specified angle
TURNTO [#n],angle
turn turtle specified angle absolute
TYPE_IN #n,str$
*2 writes string to a channel (a bit tricky, but usefull)
UNDER [#n,] 0 or 1
turns underlining on (1) or off (0)
VER$ returns a string with the QDOS version
VIEW [#n,]file
*1 a little bit like the usual TYPE
WCOPY file1,file2
*1 wildcard copy. The Wildcard is the Underliner '_' !
WDEL file *1 wildcard delete ( Wildcard='_' Underliner ! )
WDEL_F *1 !!!! Danger !!!!
WDIR *1 wildcard directory (Wildcard='_' Underliner !)
WHEN_ERROR *2
WIDTH [#n,]line_width
set default width of devices (AUTOMATIC LF !)
WINDOW [#n,]sx,sy,x,y
specify window size (sx,sy) and origin (x,y) in pixel
WMON *1 default monitor screen
WREN name1,name2
*1 wildcard rename (Wildcard='_' Underliner !)
WSTAT files *1 wildcard file statistics
WTV *1 default TV screen
4) Introduction to DOS-calls
a) Supervisor TRAP (#0)
Enter Supervisormode with TRAP #0
b) Manager TRAPs (#1)
system calls [ MOVEQ #??,D0 .... TRAP #1]
D0=$00 MT.INF provide current job and system information
Call parameters Return parameters
D1 D1.L current Job ID
D2 D2.L ASCII version
D3 D3 preserved
A0 A0 pointer to system variables
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
D0=$01 MT.CJOB create a job in transient prog. area
Call parameters Return parameters
D1.L owner JOB ID D1.L Job ID
D2.L length of code(bytes) D2 preserved
D3.L length of data space D3 preserved
A0 A0 base of area allocated
A1 start address or 0 A1 preserved
A2 A2 preserved
A3 A3 preserved
Errors : OM,NJ
D0=$02 MT.JINF Provide information on a job
Call parameters Return parameters
D1.L JOB ID D1.L next Job in tree
D2.L Job at top of tree D2.L owner of Job
D3 D3 MSB<0 if suspended, LSB=priority
A0 A0 base address of job
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NJ
D0=$03 illegal system trap
D0=$04 MT.RJOB Remove job from transient prog. area
Call parameters Return parameters
D1.L JOB ID D1 ?
D2 D2 ?
D3.L Error code D3 ?
A0 A0 ?
A1 A1 ?
A2 A2 ?
A3 A3 ?
Errors : NJ,NC
D0=$05 MT.FRJOB force remove job from transient prog. area
Call parameters Return parameters
D1.L JOB ID D1 ?
D2 D2 ?
D3.L Error code D3 ?
A0 A0 ?
A1 A1 ?
A2 A2 ?
A3 A3 ?
Errors : NJ
D0=$06 MT.FREE finds largest contiguous free trans. prog. space
Call parameters Return parameters
D1 D1.L length of space
D2 D2 ?
D3 D3 ?
A0 A0 ?
A1 A1 ?
A2 A2 ?
A3 A3 ?
D0=$07 MT.TRAPV sets per job pointer to trap vectors
Call parameters Return parameters
D1.L JOB ID D1.L Job ID
D2 D2 preserved
D3 D3 preserved
A0 A0 base of job
A1 pointer to table A1 ?
A2 A2 preserved
A3 A3 preserved
D0=$08 MT.SUSJB suspend job
Call parameters Return parameters
D1.L JOB ID D1.L Job ID
D2 D2 preserved
D3.W timeout D3 preserved
A0 A0 base of job control area
A1 address of flag byte A1 preserved
A2 A2 preserved
A3 A3 preserved
Errors : NJ
D0=$09 MT.RELJB Release job
Call parameters Return parameters
D1.L JOB ID D1.L Job ID
D2 D2 preserved
D3 D3 preserved
A0 A0 base of job control area
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
Errors : NJ
D0=$0A MT.ACTIV activate job
Call parameters Return parameters
D1.L JOB ID D1.L Job ID
D2.B priority (0-127) D2 preserved
D3.W timeout (-1,0) D3 preserved
A0 A0 base of job control area
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
Errors : NJ,NC
D0=$0B MT.PRIOR change a job's priority
Call parameters Return parameters
D1.L JOB ID D1.L Job ID
D2.B priority (0-127) D2 preserved
D3 D3 preserved
A0 A0 base of job control area
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
Errors : NJ
D0=$0C MT.ALLOC allocate an area in a heap
Call parameters Return parameters
D1.L required length D1.L allocated length
D2 D2 ?
D3 D3 ?
A0 pointer to pointer A0 base of area allocated
to free space
A1 A1 ?
A2 A2 ?
A3 A3 ?
A6 base address A6 preserved
Errors : OM
D0=$0D MT.LNKFR link free space back into heap
Call parameters Return parameters
D1.L length to link in D1 ?
D2 D2 ?
D3 D3 ?
A0 base of new space A0 ?
A1 pointer to pointer A1 ?
to free space
A2 A2 ?
A3 A3 ?
A6 base address A6 preserved
D0=$0E MT.ALRES allocate resident procedure area
Call parameters Return parameters
D1.L no. of bytes required D1 ?
D2 D2 ?
D3 D3 ?
A0 A0 base address of area
A1 A1 ?
A2 A2 ?
A3 A3 ?
Errors : OM,NC
D0=$0F MT.RERES release resident procedure area
Call parameters Return parameters
D1 D1 ?
D2 D2 ?
D3 D3 ?
A0 A0 ?
A1 A1 ?
A2 A2 ?
A3 A3 ?
Errors : NC
D0=$10 MT.DMODE Sets or reads the display mode
Call parameters Return parameters
D1.B -1 read mode D1.B display mode
0 : 512*256
8 : 256*256
D2.B -1 read display D2.B display type
0 : monitor
1 : TV
D3 D3 preserved
A0 A0 preserved
A1 A1 preserved
A2 A2 preserved
A3 A3 ?
D0=$11 MT.IPCOM Sends a command to the IPC
Call parameters Return parameters
D1 D1.B IPC return parameter
D2 D2 preserved
D3 D3 preserved
D5 D5 ?
D7 D7 ?
A0 A0 preserved
A1 A1 preserved
A2 A2 preserved
A3.L pointer to command A3 preserved
D0=$12 MT.BAUD sets the baud rate
Call parameters Return parameters
D1.W baud rate D1 ?
D2 D2 preserved
D3 D3 preserved
A0 A0 preserved
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
D0=$13 MT.RCLCK reads the clock
Call parameters Return parameters
D1 D1.L time in seconds
D2 D2 ?
D3 D3 preserved
A0 A0 ?
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
D0=$14 MT.SCLCK sets the clock
Call parameters Return parameters
D1.L time in seconds D1.L time in seconds
D2 D2 ?
D3 D3 ?
A0 A0 ?
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
D0=$15 MT.ACLCK adjust the clock
Call parameters Return parameters
D1.L adjustment in seconds D1.L time in seconds
D2 D2 ?
D3 D3 ?
A0 A0 ?
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
D0=$16 MT.ALBAS allocate Basic programm area
Call parameters Return parameters
D1.L no. of bytes required D1.L number of bytes allocated
D2 D2 ?
D3 D3 ?
A0 A0 ?
A1 A1 ?
A2 A2 ?
A3 A3 ?
A6 base address A6 new base address
A7 USP A7 new USP
Errors : OM
D0=$17 MT.REBAS release Basic programm area
Call parameters Return parameters
D1.L no. of bytes D1.L number of bytes released
D2 D2 ?
D3 D3 ?
A0 A0 ?
A1 A1 ?
A2 A2 ?
A3 A3 ?
A6 base address A6 new base address
A7 USP A7 new USP
D0=$18 MT.ALCHP allocate common heap area
Call parameters Return parameters
D1.L no. of bytes required D1.L number of bytes allocated
D2.L owner job ID D2 ?
D3 D3 ?
A0 A0 base address of area
A1 A1 ?
A2 A2 ?
A3 A3 ?
Errors : OM,NJ
D0=$19 MT.RECHP release common heap area
Call parameters Return parameters
D1 D1 ?
D2 D2 ?
D3 D3 ?
A0.L base of area to free A0 ?
A1 A1 ?
A2 A2 ?
A3 A3 ?
D0=$1A MT.LXINT links in an external interrupt service routine
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1.L entry address A1 ?
A1 -> 4(A0) !
A2 A2 preserved
A3 A3 preserved
D0=$1B MT.RXINT remove external interrupt routine from list
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
D0=$1C MT.LPOLL link in 50/60 Hz poll routine
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1.L entry address A1 ?
A1 -> 4(A0) !
A2 A2 preserved
A3 A3 preserved
D0=$1D MT.RPOLL remove 50/60 Hz routine from list
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
D0=$1E MT.LSCHD links in a scheduler loop task
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1.L entry address A1 ?
A1 -> 4(A0) !
A2 A2 preserved
A3 A3 preserved
D0=$1F MT.RSCHD remove scheduler loop task from list
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
D0=$20 MT.LIOD links in I/O device driver
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1.L entry address A1 ?
A1 -> 4(A0) !
A2 A2 preserved
A3 A3 preserved
D0=$21 MT.RIOD remove I/O device driver from list
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
D0=$22 MT.LDD links in directory device driver
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1.L entry address A1 ?
A1 -> 4(A0) !
A2 A2 preserved
A3 A3 preserved
D0=$23 MT.RDD remove directory device driver from list
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L address of link A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
c) IO allocation TRAPs (#2)
D0=$01 IO.OPEN opens a channel for I/O
Call parameters Return parameters
D1.L job ID D1 job ID
D2 D2 preserved
D3.L code where bit: D3 preserved
0 = old exclusive
1 = old shared
2 = new exclusive
3 = new overwrite
4 = open Directory
A0.L addresss of name A0.L channel ID
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
Errors : NO,NJ,OM,NF,EX,IU,BN
D0=$02 IO.CLOSE closes a channel
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3 D3 preserved
A0.L channel ID A0 ?
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
Errors : NO
D0=$03 IO.FORMT Format a sectored medium
Call parameters Return parameters
D1 D1.W good sectors
D2 D2.W total sectors
D3 D3 preserved
A0.L pointer to name A0 ?
A1 A1 preserved
A2 A2 preserved
A3 A3 preserved
Errors : OM,FF,NF,IU
D0=$02 IO.CLOSE closes a channel
Call parameters Return parameters
D1.L job ID D1 ?
D2 D2 preserved
D3 D3 ?
A0.L pointer to name A0 ?
A1 A1 ?
A2 A2 ?
A3 A3 preserved
Errors : NO,OM,NF,BN
d) IO utilisation TRAPs (#3)
TRAP #3 IO calls [ MOVEQ #??,D0 .... TRAP #3 ]
D0=$00 IO.PEND Checks for pending input
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,EF
D0=$01 IO.FBYTE Fetch a byte
Call parameters Return parameters
D1 D1.B byte fetched
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,EF
D0=$02 IO.FLINE Fetch a line of character terminated by <LF>
Call parameters Return parameters
D1 D1.W number of bytes fetched
D2.W length of buffer D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1.L base of buffer A1 updated pointer to buffer
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,EF,BO
D0=$03 IO.FSTRG Fetches a string of bytes
Call parameters Return parameters
D1 D1.W number of bytes fetched
D2.W length of buffer D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1.L base of buffer A1 updated pointer to buffer
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,EF
D0=$04 IO.EDLIN edits a line of characters
Call parameters Return parameters
D1.L cursor/line length D1.L cursor/line length
D2.W length of buffer D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1.L pointer to EOL A1 pointer to end of line
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,BO
D0=$05 IO.SBYTE sends a byte
Call parameters Return parameters
D1.B byte to be sent D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,DF,OR
D0=$06 illegal System call
D0=$07 IO.SSTRG sends a string of bytes
Call parameters Return parameters
D1 D1.W number of bytes sent
D2.W number of bytes D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1.L base of buffer A1 updated pointer to buffer
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,DF
D0=$08 illegal System call
D0=$09 IO.EXTOP invoke additional routines as part of screen driver
D0=$0A SD.PXENQ return window size and cursor position (pixel)
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1.L base of buffer A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
0(A1) = X-dimension of window
2(A1) = Y-dimension of window
4(A1) = X-position of cursor
6(A1) = Y-position of cursor
D0=$0B SD.CHENQ return window size and cursor position (character)
Call parameters Return parameters
D1 D1 preserved
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1.L base of buffer A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
0(A1) = X-dimension of window
2(A1) = Y-dimension of window
4(A1) = X-position of cursor
6(A1) = Y-position of cursor
D0=$0C SD.BORDR sets the border with and colour
Call parameters Return parameters
D1.B colour D1 ?
D2.W width D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1.L A1 preserved
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$0D SD.WDEF redifines a window
Call parameters Return parameters
D1.B border colour D1 ?
D2.W border width D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1.L base of buffer A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,OR
0(A1) = X-dimension of window
2(A1) = Y-dimension of window
4(A1) = X-origin
6(A1) = Y-origin
D0=$0E SD.CURE enables the cursor
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$0F SD.CURS suppress the cursor
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$10 SD.POS positionm cursor at row, column (character)
Call parameters Return parameters
D1.W column number D1 ?
D2.W row number D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,OR
D0=$11 SD.TAB position cursor at column
Call parameters Return parameters
D1.W column number D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,OR
D0=$12 SD.NL new line
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,OR
D0=$13 SD.PCOL previus column
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,OR
D0=$14 SD.NCOL next column
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,OR
D0=$15 SD.PROW previus row
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,OR
D0=$16 SD.NROW next row
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,OR
D0=$17 SD.PIXP position cursor using pixel coordinates
Call parameters Return parameters
D1.W X-coordinate D1 ?
D2.W Y-coordinate D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,OR
D0=$18 SD.SCROL Scroll all of a window
Call parameters Return parameters
D1.W distance to scroll D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$19 SD.SCRTP scroll the top of a window
Call parameters Return parameters
D1.W distance to scroll D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$1A SD.SCRBT scroll the bottom of a window
Call parameters Return parameters
D1.W distance to scroll D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$1B SD.PAN Pans all of a window
Call parameters Return parameters
D1.W distance to pan D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$1C illegal system call
D0=$1D illegal system call
D0=$1E SD.PANLN pans cursor line
Call parameters Return parameters
D1.W distance to pan D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$1F SD.PANRT pans right hand end of cursor line
Call parameters Return parameters
D1.W distance to pan D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$20 SD.CLEAR clears all of a window
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$21 SD.CLRTP clears the top of a window
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$22 SD.CLRBT clears the bottom of a window
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$23 SD.CLRLN clears the cursor line
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$24 SD.CLRRT clears the right hand end of the cursor line
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$25 SD.FOUNT sets or resets the character fount
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 base of font A1 ?
A2 base of second font A2 preserved
A3 A3 preserved
Errors : NC,NO
Format of Font:
$00 lowest valid character
$01 number of valid characters-1
$02..$0A 9 bytes of pixels for 1st character
$0B..$13 9 bytes of pixels ...
D0=$26 SD.RECOL recolours a window
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 ptr to colour list A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
The colour list consists of 8 bytes, which contain the new
colour for each old colour
D0=$27 SD.SETPA sets Paper colour
Call parameters Return parameters
D1.B colour D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$28 SD.SETST sets Strip colour
Call parameters Return parameters
D1.B colour D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$29 SD.SETIN sets ink colour
Call parameters Return parameters
D1.B colour D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$2A SD.SETFL sets flashing
Call parameters Return parameters
D1.B flash attribute D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$2B SD.SETUL sets Underlining
Call parameters Return parameters
D1.B underline attribute D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$2C SD.SETMD sets character writing or plotting mode
Call parameters Return parameters
D1.W mode D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
modes: -1=XOR , 0=Ink on strip , 1=ink on transparent
D0=$2D SD.SETSZ set character size and spacing
Call parameters Return parameters
D1.W char width/spacing D1 ?
D2.W char height/spacing D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D1 = 0..3 (5 in 6, 5 in 8 , 10 in 12, 10 in 16)
D2 = 0..1 (9 in 10 , 18 in 20)
D0=$2E SD.FILL fills a rectangular block within a window
Call parameters Return parameters
D1.B colour D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 ptr to block def A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
0(A1) = width in pixel
2(A1) = height in pixel
4(A1) = X origin (relative to window)
6(A1) = Y origin
D0=$2F illegal system call
D0=$30 SD.POINT plots a point
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 arithmetic stack ptr A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
0(A1) = Y coordinate (6 byte Float)
6(A1) = X coordinate
D0=$31 SD.LINE plots a line
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 arithmetic stack ptr A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
0(A1) = Y coordinate end of line (6 byte Float)
6(A1) = X coordinate EOL
C(A1) = Y start
12(A1) = X start
D0=$32 SD.ARC plots an arc
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 arithmetic stack ptr A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
0(A1) = angle (6 byte Float)
6(A1) = Y end
C(A1) = X end
12(A1) = Y start
18(A1) = X start
D0=$33 SD.ELLIPS plots an ellipse
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 arithmetic stack ptr A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
0(A1) = angle (6 byte Float)
6(A1) = radius
C(A1) = eccentricity
12(A1) = Y centre
18(A1) = X centre
D0=$34 SD.SCALE sets window scale
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 arithmetic stack ptr A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
0(A1) = Y coordinate bottom line (6 byte Float)
6(A1) = X coordinate left hand pixel
C(A1) = length of Y axis
D0=$35 SD.FLOOD turns area flood on and off
Call parameters Return parameters
D1.L 0/1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$36 SD.GCUR sets graphics cursor position
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 arithmetic stack ptr A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
0(A1) = grafics X coordinate (6 byte Float)
6(A1) = grafics Y coordinate
C(A1) = pixel offset to the right
12(A1) = piixel offset downwards
D0=$37 illegal system call
D0=$38 illegal system call
D0=$39 illegal system call
D0=$3A illegal system call
D0=$3B illegal system call
D0=$3C illegal system call
D0=$3D illegal system call
D0=$3E illegal system call
D0=$3F illegal system call
D0=$40 FS.CHECK checks all pending operations on a file
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$41 FS.FLUSH flushes buffer for file
Call parameters Return parameters
D1 D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$42 FS.POSAB position file pointer absolute
Call parameters Return parameters
D1.L position in file D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,EF
D0=$43 FS.POSRE position file pointer relative
Call parameters Return parameters
D1.L offset to file ptr D1 ?
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,EF
D0=$44 illegal system call
D0=$45 FS.MDINF Gets information about storage medium
Call parameters Return parameters
D1 D1 empty/good sectors
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 ptr to 10 byte buffer A1 end of medium name
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
D0=$46 FS.HEADS sets the file header
Call parameters Return parameters
D1 D1 lenght of header set
D2 D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 base of header block A1 end of header definition
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO
00 file length
04 file access
05 file type (0=data , 1=executable)
06 8 byte type dependent information (size of dataspace)
0E length of file name
10 up to 36 characters of file name
34 date information
D0=$47 FS.HEADR reads the file header
Call parameters Return parameters
D1 D1 ?
D2.W bufer length D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 ptr to read buffer A1 ?
A2 A2 preserved
A3 A3 preserved
Errors : NC,NO,BO
D0=$48 FS.LOAD loads a file into memory
Call parameters Return parameters
D1 D1 ?
D2.L length of file D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 address for load A1 top address after load
A2 A2 preserved
A3 A3 preserved
Errors : NO
D0=$49 FS.SAVE saves a file from memory
Call parameters Return parameters
D1 D1 ?
D2.L length of file D2 preserved
D3.W timeout D3 preserved
A0.L channel ID A0 preserved
A1 ptr to data A1 top address of file
A2 A2 preserved
A3 A3 preserved
Errors : DF,NO
e) relative to A6 TRAP (#4)
makes the next IO trap relative to A6 (for BASIC)
f) Vectored utilities
Vectored utilities [ MOVEA.W $???,An JSR (An)]
0C0 MM.ALCHP allocate common heap (D1)
0C2 MM.RECHP release common heap
0C4 UT.WINDW Set up window
0C6 UT.CON set up a console window
0C8 UT.SCR set up screen window
0CA UT.ERR0 write error message to #0
0CC UT.ERR write error message to a channel
0CE UT.MINT convert integer to ASCII
0D0 UT.MTEXT send message to a channel
0D2 UT.LINK link intem into list
0D4 UT.UNLNK unlink item from list
0D6 illegal Vector !
0D8 MM.ALLOC allocate area in a heap
0DA MM.LNKFR Links free space into heap
0DC IO.QSET set up a queue
0DE IO.QTEST test queue status
0E0 IO.QIN put byte into a queue
0E2 IO.QOUT Extract a byte frrom a queue
0E4 IO.QEOF put EOF marker into queue
0E6 UT.CSTR compare two strings
0E8 IO.SERQ direct queue handling
0EA IO.SERIO General IO handling
0EC CN.DATE get date and time
0EE CN.DAY get day of week
0F0 CN.FTOD convert float to ASCII
0F2 CN.ITOD convert Integer to ASCII
0F4 CN.ITOBB convert binary byte to ASCII
0F6 CN.ITOBW convert binary word to ASCII
0F8 CN.ITOBL convert binary long word to ASCII
0FA CN.ITOHB convert hex byte to ASCII
0FC CN.ITOHW convert hex word to ASCII
0FE CN.ITOHL convert hex long word to ASCII
100 CN.DTOF convert ASCII to float
102 CN.DTOI convert ASCII to integer
104 CN.BTOIB convert ASCII to binary byte
106 CN.BTOIW convert ASCII to binary word
108 CN.BTOIL convert ASCII to binary long word
10A CN.HTOIB convert ASCII to hex byte
10C CN.HTOIW convert ASCII to hex word
10E CN.HTOIL convert ASCII to hex long word
110 BP.INIT basic procedure initialization
112 CA.GTINT Get integers from basic
114 CA.GTFP Get floats from basic
116 CA.GTSTR Get strings from basic
118 CA.GTLIN Get long integers from basic
11A BV.CHRIX reserve space on arithmetic stack
11C RI.EXEC Executes an arithmetic operation
11E RI.EXECB execute list of arithmetic operations
120 BP.LET return basic parameter value
122 IO.NAME decode a device name
124 MD.READ read a sector on a microdrive
126 MD.WRITE write a sector on a microdrive
128 MD.VERIN verify a sector on a microdrrive
12A MD.SECTR read a sector header on a microdrive
12C ANA_SYNX basic syntax analyser
12E TB_LIST first syntax table
130 EXP_SYNX expression syntax table
132 FMT_LINE format precompiled line
134 COMP_ERR error when compiling
136 STO_LINE store precompiled line
138 TKN_LIST convert precompiled line to ASCII
13A INI_STCK initialize basic stacks
g) System Variables ($28000+??)
00 SV.IDENT Identification
04 SV.CHEAP Base of common heap
08 SV.CHPFR First free space in common heap
0C SV.FREE Base of free area
10 SV.BASIC Base of BASIC stack
14 SV.TRNSP Base of transient program area
18 SV.TRNFR First free space in TPA
1C SV.RESPR Base of RESPR
20 SV.RAMT Top of RAM(+1)
2E SV.RAND Random number(constantly changing)
30 SV.POLLM Count of poll interrupts missed
32 SV.TVMOD 0 if not TV display
34 SV.MCSTA MC status register
35 SV.PCINT PC interrupt register
37 SV.NETNR Network station number
38 SV.I2LST list of INT2 drivers
3C SV.PLIST list of 50 Hz routines
40 SV.SHLIST List of scheduler tasks
44 SV.DRLST list of device drivers
48 SV.DDLST list of directory device drivers
4C SV.KEYQ keyboard queue
50 SV.TRAPV trap redirection table
54 SV.BTPNT most recent slave block entry
58 SV.BTBAS base of slave block table
5C SV.BTTOP top of slave block table
60 SV.JBTAG Current value of job tag
62 SV.JBMAX Highest current job number
64 SV.JBPNT current job table entry
68 SV.JBBAS base of job table
6C SV.JBTOP top of job table
70 SV.CHTAG value of channel tag
72 SV.CHMAX current channel number
74 SV.CHPNT Pointer to last channel checked
78 SV.CHBAS Pointer to base of channel table
7C SV.CHTOP Pointer to top of channel table
88 SV.CAPS Caps lock
8A SV.ARBUF Auto repeat buffer
8C SV.ARDEL Autorepeat delay
8E SV.ARFRQ Autorepeat 1/frequency
90 SV.ARCNT Autorepeat count
92 SV.CQCH Taskswitch character(^C)
94 SV.WP Write protect
96 SV.SOUND Sound status
98 SV.SER1C SER1 queue address
9C SV.SER2C SER2 queue address
A0 SV.TMODE ZX8032 transmit mode
A2 SV.CSUB CAPSLOCK routine ! now changed to Clock offset !
A6 SV.TIMO Timeout for transmit
A8 SV.TIMOV Value of switching timeout (2 chars.)
AA SV.FSTAT Flashing cursor status
h) Basic Variables (??(A6))
00 BV.BFBAS buffer base
04 BV.BFP buffer running pointer
08 BV.TKBAS token list
0C BV.TKP token list running pointer
10 BV.PFBAS program file
14 BV.PFP program running pointer
18 BV.NBAS name table
1C BV.NTP name table running pointer
20 BV.NLBAS name list
24 BV.NLP name list running pointer
28 BV.VVBAS variable values
2C BV.VVP variable values running pointer
30 BV.CHBAS channel name
34 BV.CHP channel name running pointer
38 BV.RTBAS return table
3C BV.RTP return table running pointer
40 BV.LNBAS line number table
44 BV.LNP line number running pointer
48 BV.BTP backtrack stack
4C BV.BTBAS backtrack running pointer
50 BV.TGP temporary graph stack
54 BV.TGBAS graph stack running pointer
58 BV.RIP arithmetic stack
5C BV.RIBAS arithmetic stack running pointer
60 BV.SSP system stack
64 BV.SSBAS system stack running pointer
68 BV.LINUM current line number
6A BV.LENGTH current length
6C BV.STMNT current statement on line
6D BV.CONT continue ($80) or stop (0) processing
6E BV.INLIN Processing in the line clause or not
6F BV.SING Single line execution ON ($FF) or OFF (0)
70 BV.INDEX Name tab row of last inlin lp index read
72 BV.VVFREE First free space in vvtable
76 BV.SSSAV Saved sp for out/mem to back to
80 BV.RAND Random number
84 BV.COMCH Command channel
88 BV.NXLIN Which line number to start after
8A BV.NXSTM Which statement to start after
8B BV.COMLN Command line saved ($ff) or not (0)
8C BV.STOPN Which stop number set
8E BV.EDIT Program has been edited ($ff) or not (0)
8F BV.BRK There has been a break (0) or not ($80)
90 BV.UNRVL Need to unravel ($ff) or not (0)
91 BV.CNSTM Statement to CONTINUE from
92 BV.CNLND Line to CONTINUE from
94 BV.DALNO Current DATA line number
96 BV.DASTM Current DATA statement number
97 BV.DAITM Next DATA item to read
98 BV.CNIND Inline loop index to CONTINUE with
9A BV.CNINL Inline loop flag for CONTINUE
9B BV.LSANY Whether checking list ($ff) or not (0)
9C BV.LSBEF Invisible top line
9E BV.LSBAS Bottom line in window
A0 BV.LSAFT Invisible bottom line
A2 BV.LENLN Length of window line
A4 BV.MAXLN Max. number of window lines
A6 BV.TOTLN Number of window line so far
AA BV.AUTO Whether AUTO/EDIT is on ($FF) or off (0)
AB BV.PRINT Print from prtok ($ff) or leave in buffer
AC BV.EDLIN Line number to edit next
AE BV.EDINC Increment on edit range
E0 Toolkit 2 ALCHP
EC QLIB_RUN
i) error codes and messages
Errors are returned in D0 throughout the whole system.
If D0 is set to 0, then no error has occured. Any negative number
means that the operation has errored.
-1 ERR.NC Not complete
-2 ERR.NJ Invalid Job
-3 ERR.OM out of memory
-4 ERR.OR out of range
-5 ERR.BO Buffer full
-6 ERR.NO Channel not open
-7 ERR.NF Not found
-8 ERR.EX already exists
-9 ERR.IU in use
-10 ERR.EF end of file
-11 ERR.DF drive full
-12 ERR.BN bad name
-13 ERR.TE Xmit error
-14 ERR.FF Format failed
-15 ERR.BP bad parameter
-16 ERR.FE bad medium
-17 ERR.XP error in expression
-18 ERR.OV overflow
-19 ERR.NI not implemented
-20 ERR.RO read only
-21 ERR.BL bad line
!! Excuse me, I give up here. Anybody, who is interested is invited
!! to complete this Manual and send the updated Version to me.
j) Channel definition block
k) File system channel definition block
l) Job control block
m) common heap header
n) Window block definition